package com.wzdigit.wms.raw.mapper.asn;

import com.wzdigit.framework.orm.mybatis.MyBatisRepository;
import com.wzdigit.wms.raw.client.request.asn.scanup.ScanUpAsnDtlRequest;
import com.wzdigit.wms.raw.client.response.asn.scanup.ScanUpNoticeResponse;
import com.wzdigit.wms.raw.client.response.asn.scanup.ScanUpSnResponse;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 收料上架Mapper
 * Created by zyf on 2021/6/17 8:17
 */
@MyBatisRepository
public interface ScanUpMapper {
    //查询发货单主页
    List<ScanUpNoticeResponse> selectNotice(@Param("asnStatus") Integer asnStatus,
                                            @Param("asnTypeList") List<String> asnTypeList,
                                            @Param("putawayFlag") Integer putawayFlag,
                                            @Param("putawayStatues") List<Integer> putawayStatues,
                                            @Param("filter") String filter);
    //根据返回发货单号&物料编码查询发货通知信息
    ScanUpNoticeResponse selectNoticeByNoAndCode(@Param("asnNo") String asnNo, @Param("skuCode") String skuCode);
    //查询物料编码对应发货单下的上架数量【未上架】
    BigDecimal selectNoneUpCount(@Param("asnHeaderId") BigDecimal asnHeaderId,
                                 @Param("skuId") BigDecimal skuId,
                                 @Param("putawayFlag") Integer putawayFlag,
                                 @Param("putawayStatus") Integer putawayStatus);
    //查询物料编码对应发货单下的上架数量【部分上架】/标志位为null查询入库总数
    BigDecimal selectPartUpCount(@Param("asnHeaderId") BigDecimal asnHeaderId,
                                 @Param("skuId") BigDecimal skuId,
                                 @Param("putawayFlag") Integer putawayFlag,
                                 @Param("putawayStatus") Integer putawayStatus);
    //查询对应物料编码的发货单下符合上架条件的货品SN集合
    List<String> selectSnsByAsnAndSku(@Param("asnNo") String asnNo,@Param("skuId") BigDecimal skuId,
                                      @Param("putawayFlag") Integer putawayFlag,
                                      @Param("putawayStatues") List<Integer> putawayStatues);
    //扫描货物SN获取清单信息
    List<ScanUpSnResponse> selectGoodsBySn(@Param("asnHeaderId") BigDecimal asnHeaderId,
                                     @Param("goodsSn") String goodsSn,
                                     @Param("skuId") BigDecimal skuId,
                                     @Param("putawayFlag") Integer putawayFlag,
                                     @Param("putawayStatues") List<Integer> putawayStatues);
    //扫描库位与仓库是否一致
    Integer selectWhsIdByLocCode(@Param("locCode") String locCode);
    //查询入库单明细的入库数量&上架数量
    List<ScanUpAsnDtlRequest> selectRcvAndPut(@Param("dtlIds") List<BigDecimal> dtlIds);

    //更新入库单明细【做批量更新需要配置数据连接的设置，因此改为单条修改】
    void updateAsnDtl(@Param("dto") ScanUpAsnDtlRequest dto, @Param("loginName") String loginName,
                      @Param("modifyDate")Date modifyDate);
    //考虑到需要结合dtlId&sn更新，同上，改为单条修改
    void  updateAsnDtlGoods(@Param("status") Integer status,@Param("scanUpSn") ScanUpSnResponse scanUpSn,
                            @Param("loginName") String loginName,@Param("modifyDate")Date modifyDate);

    List<ScanUpSnResponse> selectAsnDtlGoods(@Param("asnNo") String asnNo,@Param("skuCode") String skuCode,
                                             @Param("goodsSnList") List<String> goodsSnList);

}
